package com.sk.stone.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sk.stone.vo.Industry;
import com.sk.stone.vo.TemplateMsgVo;
import com.sk.stone.vo.TemplateResult;
import com.sk.stone.vo.WechatTemplate;
import com.sk.util.HttpClientUtil;
import lombok.extern.slf4j.Slf4j;

import java.util.HashMap;
import java.util.Map;

/**
 * 微信模板消息发送工具类
 */
@Slf4j
public class WechatNoticeUtils {


    /**
     * 获取帐号设置的行业信息
     *  1、可登录微信公众平台，在公众号后台中查看行业信息。
     *  2、为方便第三方开发者，提供通过接口调用的方式来获取帐号所设置的行业信息
     * @param accessToken 接口调用凭证
     * @return eg:{"primary_industry":{"first_class":"文体娱乐","second_class":"娱乐休闲"},"secondary_industry":{"first_class":"","second_class":""}}
     */
    public static Industry getTemplateIndustry(String accessToken) {
        String url="https://api.weixin.qq.com/cgi-bin/template/get_industry?access_token=" + accessToken;
        String result= HttpClientUtil.doGet(url);
        Industry industry= JSONObject.parseObject(result,Industry.class);
        log.info("获取帐号设置的行业信息={}", result);
        return industry;
    }

    /**
     * 获取模板列表
     *  1、获取已添加至帐号下所有模板列表，可在微信公众平台后台中查看模板列表信息。为方便第三方开发者，提供通过接口调用的方式来获取帐号下所有模板信息
     * @param accessToken 接口调用凭证
     * @return
     */
    public static WechatTemplate getAllPrivateTemplate(String accessToken) {
        String url="https://api.weixin.qq.com/cgi-bin/template/get_all_private_template?access_token=" + accessToken;
        String result= HttpClientUtil.doGet(url);
        WechatTemplate wechatTemplate=JSONObject.parseObject(result,WechatTemplate.class);
        log.info("获取模板列表={}", result);
        return wechatTemplate;
    }

    /**
     * 删除模板
     * @param accessToken 接口调用凭证
     * @param templateId 公众帐号下模板消息ID
     * @return
     */
    public static TemplateResult delPrivateTemplate(String accessToken, String templateId) {
        String url="https://api.weixin.qq.com/cgi-bin/template/del_private_template?access_token=" + accessToken;
        Map<String, String> param=new HashMap<>();
        param.put("template_id",templateId);
        String result= HttpClientUtil.doPost(url,param);
        TemplateResult templateResult=JSONObject.parseObject(result,TemplateResult.class);
        return templateResult;
    }

    /**
     * 给服务号用户下发模板消息通知
     * 小程序订阅消息
     * https://developers.weixin.qq.com/community/develop/article/doc/000aee5bfc0af070052de1fc156413
     *
     * 服务号模板消息
     * https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Template_Message_Interface.html#%E5%8F%91%E9%80%81%E6%A8%A1%E6%9D%BF%E6%B6%88%E6%81%AF
     */
    public static TemplateResult sendTemplateMsg(TemplateMsgVo templateMsgVo ) {
        String url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + templateMsgVo.getAccessToken();
        String json= JSON.toJSONString(templateMsgVo);
        String result= HttpClientUtil.doPostJson(url,json );
        TemplateResult templateResult=JSONObject.parseObject(result,TemplateResult.class);
        log.info("模板消息推送结果={}", result);
        return templateResult;
    }


    /**
     * 获取不同平台的接口调用凭证:access_token
     * appid和appsecret到小程序后台获取，当然也可以让小程序开发人员给你传过来
     * @return
     */
    public  static String getAccessToken( String appid, String appSecret) {
        //获取access_token
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential" +
                "&appid=" + appid + "&secret=" + appSecret;
        String json=HttpClientUtil.doGet(url);
        log.info("getAccessToken-json={}",json);
        JSONObject myJson = JSONObject.parseObject(json);
        String token =  myJson.get("access_token").toString();
        return token;
    }




}
